1. Technical Field
The present invention is directed to a manner in which a processing system schedules the running of threads and the like. More particularly, the invention is directed to a system having adaptive partition scheduling for process threads.
2. Related Art
The kernel of an operating system may divide CPU resources so that each thread that is active in the system obtains an amount of CPU time to execute the corresponding process. The kernel may implement a scheduling system that determines how the available CPU time is allocated between multiple threads.
There are various types of process scheduling systems: a FIFO scheduling system; a round-robin scheduling system; and a sporadic scheduling system. In each system, a priority value may be assigned to each thread of a process that is executed by the CPU. High priority values are assigned to threads that may be important to the operation of the overall system while threads that may be less important to the operation of the system may have lower priority values. Whether the scheduling system gives a thread access to the CPU may also depend on the state of the thread. A thread may be ready or blocked (although other states also may be used). A thread may be ready for execution when conditions for it to run have been met. A thread may be blocked when it tries to initiate an operation that cannot be completed immediately. A blocked thread may wait for the completion of some event before going to a ready or running state.
In some operating systems, each thread in the system may run using any of the foregoing scheduling systems. The scheduling systems may be effective on a per-thread basis for all threads and processes on a node. Each thread may be assigned to a particular scheduling system type through the operation of the process/thread itself. This may provide the software designer with a degree of design flexibility. However, it may also involve a need for coordination between software designers implementing code for the same system. This coordination includes the assignment of priorities to the different threads as well as the scheduling system type assigned to each thread.
While the foregoing scheduling systems have advantages in different applications, they may experience deficiencies when used in certain system applications. When per-thread scheduling systems are used in real-time systems where the latencies of a process/thread have been planned solely through the assignment of priority levels, very long latencies for low-priority threads may occur. Malicious software processes may configure themselves for high priority execution and may preempt proper scheduling of lower priority threads. This problem also may occur during system development when a high priority thread malfunctions and enters an infinite loop. Global fair-share scheduling systems may avoid such problems, but lack the responsiveness needed for use in a real-time system. These scheduling systems may be more problematic when implemented in a multiprocessing system, such as a bound multiprocessing system.